//package com.example.jwt.utils;
//
//import cn.hutool.core.convert.Convert;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author: mtl
// * @Date: 2021/8/31 16:55
// * @Description: 对外接口拦截器
// */
//@Slf4j
//@Component
//public class ExternalAdapter extends HandlerInterceptorAdapter {
//
//    /**
//     * 私钥数据<AppKey,privateKey>形式
//     */
//    private static Map<String,String>  maps;
//    @Value("${external.map}")
//    public void setMaps(String str) {
//        maps=JSON.parseObject(str,Map.class);
//    }
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        //请求头取值解密
//        boolean flag = false;
//        String appKey = request.getHeader("appKey");
//        String t= request.getHeader("t");
//		String sign= request.getHeader("sign");
//        RestResponse restResponse =  RestResponse.failed("10001","未验证");
//        if(StringUtils.isEmpty(appKey)||StringUtils.isEmpty(t)||StringUtils.isEmpty(sign)) {
//            restResponse =  RestResponse.failed("10002","请保证appkey、t、sign不为空");
//        }else if(null == appKey){
//            restResponse =  RestResponse.failed("10003","appkey错误,请联系管理员");
//        }else if(!checkTime(t)){
//            restResponse =  RestResponse.failed("10004","时间格式错误或请求时间超过有效期");
//        }else if(org.springframework.util.StringUtils.isEmpty(maps.get(appKey))){
//            restResponse =  RestResponse.failed("10002","appKey错误");
//        }else {
//            String priKey = maps.get(appKey);
//            flag = isSign(appKey, t, priKey, sign);
//            if(flag){
//                restResponse = RestResponse.succeed("验证成功",0);
//            }else {
//                restResponse = RestResponse.failed("校验失败,请检查参数或请求时间戳超时");
//            }
//        }
//        if(!flag){
//            response.getWriter().println(JSONObject.toJSONString(restResponse));
//        }
//        log.info("外部请求:appKey：{}、t：{}、sign：{},restResponse:{}",appKey,t,sign,JSONObject.toJSONString(restResponse));
//
//        return flag;
//    }
//
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//
//    }
//
//    /**
//     *校验签字
//     * @param app 渠道号
//     * @param t 时间戳
//     * @param privateKey 私钥
//     * @return
//     */
//    public static Boolean isSign(String app,String t,String privateKey,String sign){
//        Map<String, String> map = new HashMap<>(3);
//        map.put("appKey",app);
//        map.put("t",t);
//        map.put("privateKey",privateKey);
//        String urlAuth = MasterUtils.urlAuth(map);
//        String pwd = MD5Utils.md5(urlAuth);
//        return sign.equals(pwd);
//    }
//
//    /**
//     * 加密
//     * @param app
//     * @param t
//     * @param privateKey
//     * @return 签字
//     */
//    public static String encryption(String app,String t,String privateKey){
//        Map<String, String> map = new HashMap<>(3);
//        map.put("appKey",app);
//        map.put("t",t);
//        map.put("privateKey",privateKey);
//        String urlAuth = MasterUtils.urlAuth(map);
//        return MD5Utils.md5(urlAuth);
//    }
//
//    /**
//     * 时间校验 目前精确为8位数
//     * @param time
//     * @return
//     */
//    public static Boolean checkTime(String time){
//        String t = Convert.toStr(System.currentTimeMillis()).substring(0, 7);
//        return time.substring(0,7).equals(t);
//    }
//
//    public static void main(String[] args) {
//
//        String privateKey="D98C0AEA50FF3D5D9F6B0503C6C73C75";
//        System.out.println("私钥"+privateKey);
//        System.out.println("生成测试数据");
//        String app="bo-dev.seedland.cc";
//        System.out.println("appKey:"+app);
//        String t= JSON.toJSONString(System.currentTimeMillis()).substring(0,8);
////        String t= JSON.toJSONString(System.currentTimeMillis()).substring(0,10);
//        System.out.println("时间:"+t);
//        String key = encryption(app, t, privateKey);
//        System.out.println("加密签字:"+key);
//        //校验
//        System.out.println(isSign(app, t, privateKey, key));
//    }
//
//
//}
